The present invention relates to the field of mass-storage devices. More particularly, this invention relates to an improved fibre-channel arbitrated-loop (xe2x80x9cFC-ALxe2x80x9d) apparatus and method having a dedicated frame buffer for loop initialization and responses.
One key component of any computer system is a device to store data. Computer systems have many different devices where data can be stored. One common place for storing massive amounts of data in a computer system is on a disc drive. The most basic parts of a disc drive are a disc that is rotated, an actuator that moves a transducer to various locations over the disc, and circuitry that is used to write and read data to and from the disc. The disc drive also includes circuitry for encoding data so that it can be successfully retrieved from and written to the disc surface. A microprocessor controls most of the operations of the disc drive, in addition to passing the data back to the requesting computer and taking data from a requesting computer for storing to the disc.
The interface for transferring data between the disc drive and the rest of the computer system is typically a bus or channel, such as the Small Computer Systems Interface (xe2x80x9cSCSIxe2x80x9d), or the Fiber Channel. Certain aspects of such interfaces are often standardized in order that various devices from different manufacturers can be interchanged and all can be connected to a common interface. Such standards are typically specified by some standards committee of an organization such as the American National Standards Institute (xe2x80x9cANSIxe2x80x9d).
One standardized interface for exchanging data between various storage devices and various computers is the fibre channel. In some embodiments, the fibre-channel standard includes arbitrated loops (described further below). In some embodiments, the fibre-channel standard supports a SCSI-like protocol for controlling data transfers.
Fiber channels represent significant advantages over Small Computer Standard Interface (xe2x80x9cSCSIxe2x80x9d) designs. Fiber channels provide significantly higher bandwidths, currently up to about 106 megabytes per second, compared to between two and twenty megabytes per second for traditional SCSI designs. Fiber channels provide greater connectivity in that up to one-hundred twenty-six devices (including the host) may be connected, as compared to a maximum of seven or fifteen devices in typical SCSI environments. The fibre channel can be attached with a single connector and does not require a switch. A fibre channel using coaxial electrical conductors operates at distances of up to thirty meters between devices, and up to ten kilometers using fibre optics for an entire channel, as compared to a maximum total length of up to twenty-five meters for SCSI environments. In SCSI environments, errors in data transmission are detected through use of parity, whereas in fibre channels, errors are identified by a running disparity and cyclic-redundancy-code check (xe2x80x9cCRC checkxe2x80x9d) information. More information can be found in U.S. Pat. No. 5,802,080 entitled xe2x80x9cCRC Checking Using a CRC Generator in a Multi-port Design,xe2x80x9d and U.S. Pat. No. 5,663,724 entitled xe2x80x9c16B/20B Encoder,xe2x80x9d both by the present inventor, Westby, and commonly assigned to the present assignee Seagate Technology, Inc., each of which is incorporated by reference.
The fibre-channel arbitrated loop (xe2x80x9cFC-ALxe2x80x9d) is an industry-standard system employing a byte-oriented DC-balanced (0,4) run-length-limited 8B/10B-partitioned block-transmission code scheme. The FC-AL operates at a clock frequency of 106.25 MHZ. One form of an 8B/10B encoder/decoder is described in U.S. Pat. No. 4,486,739 granted Dec. 4, 1984 for xe2x80x9cByte Oriented DC Balanced (0,4) 8B/10B Partitioned Block Transmission Codexe2x80x9d by Franaszek et al., which is incorporated by reference.
A fibre-channel arbitrated loop (xe2x80x9cFC-ALxe2x80x9d) allows for multiple devices, each called xe2x80x9ca node,xe2x80x9d to be connected together. A node may be any device (a computer, workstation, printer, disc drive, scanner, etc.) of the computer system having an interface allowing it to be connected to a fibre-channel xe2x80x9ctopologyxe2x80x9d (defined just below). Each node has at least one port, called an NL port (xe2x80x9cnode-loop portxe2x80x9d) to provide access to other nodes. The components that connect two or more ports together are collectively called a xe2x80x9ctopologyxe2x80x9d or a xe2x80x9cloop.xe2x80x9d Each node communicates with all other nodes within the provided topology or loop.
Ports are the connections in a fibre-channel node, though which data may pass over the fibre channel to ports of other nodes (the outside world). A typical fibre-channel drive has two ports packaged within the drive""s node. Each port includes a pair of xe2x80x9cfibresxe2x80x9dxe2x80x94one to carry information into the port and one to carry information out of the port. Each xe2x80x9cfibrexe2x80x9d is a serial data connection, and, in one embodiment, each fibre is actually a coaxial wire (e.g., coaxial copper conductors, used when the nodes are in close proximity to one another); in other embodiments, a fibre is implemented as an optical fibre for at least some of its path (e.g., when nodes are separated by an appreciable distance, such as nodes in different cabinets or, especially, different buildings). The pair of fibres connected to each port (one carrying data into the port, the other carrying data out from the port) is called a xe2x80x9clinkxe2x80x9d and is part of each topology. Links carry information or signals packaged in xe2x80x9cframesxe2x80x9d between nodes. Each link can handle multiple types of frames (e.g., initialization, data, and control frames).
Since each fibre carries data in one direction only, nodes are connected to one another along a loop, wherein the nodes must arbitrate for control of the loop when they have data to transfer. xe2x80x9cArbitrationxe2x80x9d is the process of coordinating the nodes to determine which one has control of the loop. Fiber-channel arbitrated loops attach multiple nodes in the loop without hubs or switches. The node ports use arbitration operations to establish a point-to-point data-transfer circuit. FC-AL is a distributed topology where each port includes at least the minimum necessary function to establish the circuit. The arbitrated-loop topology is used to connect any number of nodes between two and one-hundred twenty-six (126) node ports.
In some embodiments, each node includes dual ports (each connected to a separate loop) which provide redundancy, so that if one loop fails, the other one can fulfill the loop duties. Dual ports also allow two hosts (e.g., two host computers) to share a single drive.
In typical first- and second-generation FC-AL drives, the two ports shared the frame-validation and frame-generation logic. This meant that if one port was receiving or transmitting a frame, the alternate port was effectively busy (since it could not simultaneously use the frame-validation and frame-generation logic), and the alternate port was thus forced to deny its host-bus adapter permission to send frames. Some host-bus adapters would continuously have to arbitrate and attempt to send a frame over and over until the primary port closed. Also, the drive was only able to transmit on one port at a time. In some cases, an outbound data transfer on a given port would have to be paused in order to send a response or perform loop initialization on the other (alternate) port.
CRC Background
Most data-transmission operations employ error checking by which an error code, based on the header and payload data of the transmission, is checked to verify the integrity of the received header and payload data. One such error-checking scheme employs cyclic-redundancy-code (xe2x80x9cCRCxe2x80x9d) information. A typical circuit employing CRC error checking will include a CRC checker to verify the integrity of received data words and a CRC generator to generate CRC information for digital words being transmitted. In multi-port designs, a CRC checker and a CRC generator must be available for each port to handle verification of each received digital word and to generate CRC information for each digital word being transmitted. In many applications, the circuit or loop-interface module transmits on only one port at a time. For example, a disc-drive subsystem communicating through a multi-port interface module to a computer network would prepare and transmit data through only a single port at any given time. However, the loop-interface module might attempt to receive data through plural ports at a given time.
One approach to reception of data through plural ports is to simply inhibit reception of data through other ports when one port is already receiving data. This approach allows common resources, such as the CRC checker or the frame-validation logic, to be shared among the several ports. The first port to receive data seizes use of the common resources to the exclusion of the other ports, and the other ports are inhibited from receiving data. Hence, incoming data cannot be received on the other ports and the other ports are limited to the function of data transmission. This approach resulted in the other ports receiving a xe2x80x9cbusyxe2x80x9d condition in response to requests to transmit data, and necessitated repeating the sequence to request transmission of data again and again, until the first port completed the operation it was performing and freed-up the common resource.
Loop Initialization Background
In plural loop networks, it is necessary to xe2x80x9cinitializexe2x80x9d a loop after an error condition is detected, as well as when a loop-interface module is connected into the channel, or when the fibre channel is powered up. Initialization is ordinarily accomplished by transmitting loop-initialization data onto the loop. However, if a loop-interface module connected to the loop is already receiving data through a port connected to another loop, that loop-interface module might not be able to receive the loop-initialization data. Normally, under such circumstances the data transfer is suspended, and loop initialization is allowed to proceed first. In other instances, the loop-initialization sequence will stall, and go into a continuous-retry mode until the other loop (of the dual-loop node) completes receiving data. Moreover, if the loop-interface modules can receive only on one loop at a time, the modules cannot receive data through another port while loop initialization is occurring on one channel.
Fiber links have received considerable attention in connection with transmission of data between various devices of a computer network. More particularly, fibre channels offer significant advantages over Small Computer System Interface (xe2x80x9cSCSIxe2x80x9d) buses in terms of higher bandwidth, greater connectability, greater ease of attachment of modules, greater transmission distance, and other factors. For example, a typical SCSI bus is able to handle up to fifteen (15) modules with a total distance of up to about 25 meters, whereas a fibre channel can handle up to one-hundred twenty-six (126) modules with a distance of about thirty meters between modules using electrical transmission, or up to ten kilometers using optical transmission. Thus, in order to achieve a data-transfer rate of, for example, a terrabyte/second peak, it would require up to seventy SCSI buses but would need only about ten fibre channels.
It is important that a channel be brought up to operation (i.e., xe2x80x9cinitializedxe2x80x9d) as early as possible to reduce the load of data traffic that would otherwise be imposed on other channels.
There is, therefore, a need for an arrangement to permit multi-port loop-interface modules to receive data and non-data frames on plural channels simultaneously, or to transmit frames on one channel while receiving data on another, or to transmit initialization and response frames on plural channels simultaneously. There is also a need for better and increased data-checking capability for data stored in on-chip buffers.
A method and dedicated frame buffer for loop initialization and responses. A fibre-channel loop interface circuit is described that includes a dedicated transmit-frame buffer for loop initialization and responses (xe2x80x9cresponsesxe2x80x9d are non-data frames sent in response to commands or inquiries from other nodes). Having such a dedicated transmit-frame buffer allows one port of a dual-port node to be transmitting initialization or response frames while another port is transmitting data frames, response frames, or initialization frames; and, in one embodiment, either or both ports can also be simultaneously receiving frames.
The present invention provides an improved communications channel system that includes a first channel node having dual ports, each port supporting a fibre-channel arbitrated-loop serial communications channel, and a dedicated frame buffer (which includes one or more specialized component frame buffers) within the first channel node for loop initialization and responses. In some embodiments, the dedicated frame buffer is configured as an on-chip buffer and includes: a first inbound non-data buffer coupled to a first port, a second inbound non-data buffer coupled to a second port, a data-frame buffer coupled to both the first port and the second port, and an outbound transmit-frame buffer coupled to at least one of the first and second ports.
Optionally, the system further includes a loop-initialization circuit that performs loop initialization substantially simultaneously on both the first port and the second port using data in the transmit-frame buffer. In some embodiments, the dedicated frame buffer includes a transmit-frame buffer having about eighty words (wherein, in this case, each xe2x80x9cwordxe2x80x9d is thirty-six bits widexe2x80x94thirty-two data bits and four parity bits). In another embodiment, the dedicated frame buffer includes a transmit-frame buffer coupled to at least one of the first and second ports for loop initialization and responses.
In some embodiments of the system, the transmit-frame buffer transmits loop initialization or responses on a first port, while substantially simultaneously a second port transmits data. In one such embodiment, the system further includes a loop-initialization circuit that performs loop initialization substantially simultaneously on both the first port and the second port using data in the transmit-frame buffer.
In some embodiments of the system, the dedicated frame buffer is configured as an on-chip buffer and includes a dedicated transmit-frame buffer coupled to at least one of the first and second ports for loop initialization and responses. In one such embodiment, the dedicated transmit-frame buffer is coupled to both ports and reserves about half of the buffer""s space for a first port and another half of the buffer""s space for a second port and the system further includes a loop-initialization circuit that performs loop initialization substantially simultaneously on both the first port and the second port using data in the transmit-frame buffer. Optionally, any of these embodiments of the system further includes a magnetic-disc-storage drive coupled to the first node, and a computer system connected to a second node (or, equivalently, a computer system having a second node), wherein the second node is coupled to the first node in a communications channel in order to transfer data between the first and second nodes. Another aspect of the present invention provides a method that includes supporting a fibre-channel arbitrated-loop serial communications channel on each of two ports of a first channel node, and receiving frames in to, and transmitting frames out from, a dedicated frame buffer located in the first channel node.
In some embodiments of the method, the dedicated frame buffer includes a first inbound non-data buffer coupled to a first port, a second inbound non-data buffer coupled to a second port, a data-frame buffer coupled to both the first port and the second port, and a dedicated transmit-frame buffer. Some versions of the method provide performing loop initialization substantially simultaneously on both the first port and the second port using data in the dedicated transmit-frame buffer. Optionally, the dedicated frame buffer includes a transmit-frame buffer having about eighty words each being thirty-six bits wide (thirty-two data bits and four parity bits). Some embodiments provide for transmitting frames from the dedicated frame buffer that includes transmitting loop-initialization and response frames from a dedicated transmit-frame buffer coupled to at least one of the first and second ports for loop initialization and responses.
Other embodiments of the method also provide for receiving data substantially simultaneously on the second port while transmitting data on the first port.
In some embodiments of the method, the dedicated frame buffer is configured as an on-chip buffer and includes a dedicated transmit-frame buffer coupled to at least one of the first and second ports for loop initialization and responses. In one such embodiment, the dedicated transmit-frame buffer is coupled to both ports and reserves about half of the buffer""s space for a first port and another half of the buffer""s space for a second port and the method further includes performing loop initialization substantially simultaneously on both the first port and the second port using data in the transmit-frame buffer. In another such embodiment, the method further includes transferring data between a magnetic-disc-storage drive coupled to the first node and a computer system coupled to a second node (or, equivalently, a computer system having a second node), wherein the second node is coupled to the first node in a communications channel in order to transfer data between the first and second nodes.
Thus, the present invention provides a significant performance enhancement by allowing transmission of loop-initialization frames and/or response frames from a dedicated transmit buffer that is operable to transmit on either or both outbound fibres of a dual-port fibre-channel interface node. In some embodiments, such transmission is performed even while the node is simultaneously receiving a data frame on one of the inbound fibres and/or receiving a non-data frame on one or both of the inbound fibres. That is, transmitting on one fibre of a port is optionally performed simultaneously with receiving on the other fibre of the same port.